Tegra: memctrl_v2: platform handler for MC settings
authorPritesh Raithatha <[email protected]>
Mon, 2 Jan 2017 14:12:31 +0000 (19:42 +0530)
committerVarun Wadekar <[email protected]>
Fri, 7 Apr 2017 16:32:28 +0000 (09:32 -0700)
This patch empowers the platforms to provide the settings (e.g. stream ID,
security setting, transaction overrides) required by the Memory Controller
driver. This allows the platforms to program the Memory Controller as per
their needs and makes the driver scalable.

Original-change-by: Pritesh Raithatha <[email protected]>
Signed-off-by: Varun Wadekar <[email protected]>
plat/nvidia/tegra/common/drivers/memctrl/memctrl_v2.c
plat/nvidia/tegra/common/drivers/smmu/smmu.c
plat/nvidia/tegra/include/drivers/memctrl_v2.h
plat/nvidia/tegra/include/drivers/smmu.h
plat/nvidia/tegra/soc/t186/plat_memctrl.c [new file with mode: 0644]
plat/nvidia/tegra/soc/t186/platform_t186.mk

index 5986416e24d857de5a7d10293f8d9ac878a5b4a8..b8c0e03ed24febe2baffff5af037283e7550c5c2 100644 (file)
 static uint64_t video_mem_base;
 static uint64_t video_mem_size_mb;
 
-/* array to hold stream_id override config register offsets */
-const static uint32_t streamid_overrides[] = {
-       MC_STREAMID_OVERRIDE_CFG_PTCR,
-#if ENABLE_AFI_DEVICE
-       MC_STREAMID_OVERRIDE_CFG_AFIR,
-       MC_STREAMID_OVERRIDE_CFG_AFIW,
-#endif
-       MC_STREAMID_OVERRIDE_CFG_HDAR,
-       MC_STREAMID_OVERRIDE_CFG_HOST1XDMAR,
-       MC_STREAMID_OVERRIDE_CFG_NVENCSRD,
-       MC_STREAMID_OVERRIDE_CFG_SATAR,
-       MC_STREAMID_OVERRIDE_CFG_MPCORER,
-       MC_STREAMID_OVERRIDE_CFG_NVENCSWR,
-       MC_STREAMID_OVERRIDE_CFG_SATAW,
-       MC_STREAMID_OVERRIDE_CFG_MPCOREW,
-       MC_STREAMID_OVERRIDE_CFG_SATAW,
-       MC_STREAMID_OVERRIDE_CFG_HDAW,
-       MC_STREAMID_OVERRIDE_CFG_ISPRA,
-       MC_STREAMID_OVERRIDE_CFG_ISPWA,
-       MC_STREAMID_OVERRIDE_CFG_ISPWB,
-       MC_STREAMID_OVERRIDE_CFG_XUSB_HOSTR,
-       MC_STREAMID_OVERRIDE_CFG_XUSB_HOSTW,
-       MC_STREAMID_OVERRIDE_CFG_XUSB_DEVR,
-       MC_STREAMID_OVERRIDE_CFG_XUSB_DEVW,
-       MC_STREAMID_OVERRIDE_CFG_TSECSRD,
-       MC_STREAMID_OVERRIDE_CFG_TSECSWR,
-       MC_STREAMID_OVERRIDE_CFG_GPUSRD,
-       MC_STREAMID_OVERRIDE_CFG_GPUSWR,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCRA,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCRAA,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCR,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCRAB,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCWA,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCWAA,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCW,
-       MC_STREAMID_OVERRIDE_CFG_SDMMCWAB,
-       MC_STREAMID_OVERRIDE_CFG_VICSRD,
-       MC_STREAMID_OVERRIDE_CFG_VICSWR,
-       MC_STREAMID_OVERRIDE_CFG_VIW,
-       MC_STREAMID_OVERRIDE_CFG_NVDECSRD,
-       MC_STREAMID_OVERRIDE_CFG_NVDECSWR,
-       MC_STREAMID_OVERRIDE_CFG_APER,
-       MC_STREAMID_OVERRIDE_CFG_APEW,
-       MC_STREAMID_OVERRIDE_CFG_NVJPGSRD,
-       MC_STREAMID_OVERRIDE_CFG_NVJPGSWR,
-       MC_STREAMID_OVERRIDE_CFG_SESRD,
-       MC_STREAMID_OVERRIDE_CFG_SESWR,
-       MC_STREAMID_OVERRIDE_CFG_ETRR,
-       MC_STREAMID_OVERRIDE_CFG_ETRW,
-       MC_STREAMID_OVERRIDE_CFG_TSECSRDB,
-       MC_STREAMID_OVERRIDE_CFG_TSECSWRB,
-       MC_STREAMID_OVERRIDE_CFG_GPUSRD2,
-       MC_STREAMID_OVERRIDE_CFG_GPUSWR2,
-       MC_STREAMID_OVERRIDE_CFG_AXISR,
-       MC_STREAMID_OVERRIDE_CFG_AXISW,
-       MC_STREAMID_OVERRIDE_CFG_EQOSR,
-       MC_STREAMID_OVERRIDE_CFG_EQOSW,
-       MC_STREAMID_OVERRIDE_CFG_UFSHCR,
-       MC_STREAMID_OVERRIDE_CFG_UFSHCW,
-       MC_STREAMID_OVERRIDE_CFG_NVDISPLAYR,
-       MC_STREAMID_OVERRIDE_CFG_BPMPR,
-       MC_STREAMID_OVERRIDE_CFG_BPMPW,
-       MC_STREAMID_OVERRIDE_CFG_BPMPDMAR,
-       MC_STREAMID_OVERRIDE_CFG_BPMPDMAW,
-       MC_STREAMID_OVERRIDE_CFG_AONR,
-       MC_STREAMID_OVERRIDE_CFG_AONW,
-       MC_STREAMID_OVERRIDE_CFG_AONDMAR,
-       MC_STREAMID_OVERRIDE_CFG_AONDMAW,
-       MC_STREAMID_OVERRIDE_CFG_SCER,
-       MC_STREAMID_OVERRIDE_CFG_SCEW,
-       MC_STREAMID_OVERRIDE_CFG_SCEDMAR,
-       MC_STREAMID_OVERRIDE_CFG_SCEDMAW,
-       MC_STREAMID_OVERRIDE_CFG_APEDMAR,
-       MC_STREAMID_OVERRIDE_CFG_APEDMAW,
-       MC_STREAMID_OVERRIDE_CFG_NVDISPLAYR1,
-       MC_STREAMID_OVERRIDE_CFG_VICSRD1,
-       MC_STREAMID_OVERRIDE_CFG_NVDECSRD1
-};
-
-/* array to hold the security configs for stream IDs */
-const static mc_streamid_security_cfg_t sec_cfgs[] = {
-       mc_make_sec_cfg(SCEW, NON_SECURE, NO_OVERRIDE, ENABLE),
-#if ENABLE_AFI_DEVICE
-       mc_make_sec_cfg(AFIR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AFIW, NON_SECURE, OVERRIDE, ENABLE),
-#endif
-       mc_make_sec_cfg(NVDISPLAYR1, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(XUSB_DEVR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(VICSRD1, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVENCSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(TSECSRDB, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AXISW, SECURE, NO_OVERRIDE, DISABLE),
-       mc_make_sec_cfg(SDMMCWAB, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AONDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(GPUSWR2, SECURE, NO_OVERRIDE, DISABLE),
-       mc_make_sec_cfg(SATAW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(UFSHCW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SDMMCR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SCEDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(UFSHCR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SDMMCWAA, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SESWR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(MPCORER, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(PTCR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(BPMPW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(ETRW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(GPUSRD, SECURE, NO_OVERRIDE, DISABLE),
-       mc_make_sec_cfg(VICSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SCEDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(HDAW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(ISPWA, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(EQOSW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(XUSB_HOSTW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(TSECSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SDMMCRAA, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(VIW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AXISR, SECURE, NO_OVERRIDE, DISABLE),
-       mc_make_sec_cfg(SDMMCW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(BPMPDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(ISPRA, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVDECSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(XUSB_DEVW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVDECSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(MPCOREW, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVDISPLAYR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(BPMPDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVJPGSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVDECSRD1, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(TSECSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVJPGSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SDMMCWA, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SCER, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(XUSB_HOSTR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(VICSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AONDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AONW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SDMMCRA, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(HOST1XDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(EQOSR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SATAR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(BPMPR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(HDAR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SDMMCRAB, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(ETRR, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(AONR, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(SESRD, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(NVENCSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(GPUSWR, SECURE, NO_OVERRIDE, DISABLE),
-       mc_make_sec_cfg(TSECSWRB, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(ISPWB, NON_SECURE, OVERRIDE, ENABLE),
-       mc_make_sec_cfg(GPUSRD2, SECURE, NO_OVERRIDE, DISABLE),
-       mc_make_sec_cfg(APEDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(APER, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(APEW, NON_SECURE, NO_OVERRIDE, ENABLE),
-       mc_make_sec_cfg(APEDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
-};
-
-const static mc_txn_override_cfg_t mc_override_cfgs[] = {
-       mc_make_txn_override_cfg(BPMPW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(EQOSW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(NVJPGSWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SDMMCWAA, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(MPCOREW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SCEDMAW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SDMMCW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(AXISW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(TSECSWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(GPUSWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(XUSB_HOSTW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(TSECSWRB, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(GPUSWR2, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(AONDMAW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(AONW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SESWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(BPMPDMAW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SDMMCWA, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(HDAW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(NVDECSWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(UFSHCW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SATAW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(ETRW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(VICSWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(NVENCSWR, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(SDMMCWAB, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(ISPWB, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(APEW, CGID_TAG_ADR),
-       mc_make_txn_override_cfg(XUSB_DEVW, CGID_TAG_ADR),
-#if ENABLE_AFI_DEVICE
-       mc_make_txn_override_cfg(AFIW, CGID_TAG_ADR),
-#endif
-       mc_make_txn_override_cfg(SCEW, CGID_TAG_ADR),
-};
-
 static void tegra_memctrl_reconfig_mss_clients(void)
 {
 #if ENABLE_ROC_FOR_ORDERING_CLIENT_REQUESTS
@@ -504,9 +311,13 @@ static void tegra_memctrl_reconfig_mss_clients(void)
 void tegra_memctrl_setup(void)
 {
        uint32_t val;
-       uint32_t num_overrides = sizeof(streamid_overrides) / sizeof(uint32_t);
-       uint32_t num_sec_cfgs = sizeof(sec_cfgs) / sizeof(mc_streamid_security_cfg_t);
-       uint32_t num_txn_overrides = sizeof(mc_override_cfgs) / sizeof(mc_txn_override_cfg_t);
+       const uint32_t *mc_streamid_override_regs;
+       uint32_t num_streamid_override_regs;
+       const mc_streamid_security_cfg_t *mc_streamid_sec_cfgs;
+       uint32_t num_streamid_sec_cfgs;
+       const mc_txn_override_cfg_t *mc_txn_override_cfgs;
+       uint32_t num_txn_override_cfgs;
+       tegra_mc_settings_t *plat_mc_settings = tegra_get_mc_settings();
        int i;
 
        INFO("Tegra Memory Controller (v2)\n");
@@ -515,18 +326,26 @@ void tegra_memctrl_setup(void)
        /* Program the SMMU pagesize */
        tegra_smmu_init();
 #endif
+       /* Get the settings from the platform */
+       assert(plat_mc_settings);
+       mc_streamid_override_regs = plat_mc_settings->streamid_override_cfg;
+       num_streamid_override_regs = plat_mc_settings->num_streamid_override_cfgs;
+       mc_streamid_sec_cfgs = plat_mc_settings->streamid_security_cfg;
+       num_streamid_sec_cfgs = plat_mc_settings->num_streamid_security_cfgs;
+       mc_txn_override_cfgs = plat_mc_settings->txn_override_cfg;
+       num_txn_override_cfgs = plat_mc_settings->num_txn_override_cfgs;
 
        /* Program all the Stream ID overrides */
-       for (i = 0; i < num_overrides; i++)
-               tegra_mc_streamid_write_32(streamid_overrides[i],
+       for (i = 0; i < num_streamid_override_regs; i++)
+               tegra_mc_streamid_write_32(mc_streamid_override_regs[i],
                        MC_STREAM_ID_MAX);
 
        /* Program the security config settings for all Stream IDs */
-       for (i = 0; i < num_sec_cfgs; i++) {
-               val = sec_cfgs[i].override_enable << 16 |
-                     sec_cfgs[i].override_client_inputs << 8 |
-                     sec_cfgs[i].override_client_ns_flag << 0;
-               tegra_mc_streamid_write_32(sec_cfgs[i].offset, val);
+       for (i = 0; i < num_streamid_sec_cfgs; i++) {
+               val = mc_streamid_sec_cfgs[i].override_enable << 16 |
+                     mc_streamid_sec_cfgs[i].override_client_inputs << 8 |
+                     mc_streamid_sec_cfgs[i].override_client_ns_flag << 0;
+               tegra_mc_streamid_write_32(mc_streamid_sec_cfgs[i].offset, val);
        }
 
        /*
@@ -543,7 +362,7 @@ void tegra_memctrl_setup(void)
         * mode, as it could be used to circumvent SMMU security checks.
         */
        tegra_mc_write_32(MC_SMMU_BYPASS_CONFIG,
-               MC_SMMU_BYPASS_CONFIG_SETTINGS);
+                         MC_SMMU_BYPASS_CONFIG_SETTINGS);
 
        /*
         * Re-configure MSS to allow ROC to deal with ordering of the
@@ -578,11 +397,11 @@ void tegra_memctrl_setup(void)
        } else {
 
                /* settings for rev. A02 */
-               for (i = 0; i < num_txn_overrides; i++) {
-                       val = tegra_mc_read_32(mc_override_cfgs[i].offset);
+               for (i = 0; i < num_txn_override_cfgs; i++) {
+                       val = tegra_mc_read_32(mc_txn_override_cfgs[i].offset);
                        val &= ~MC_TXN_OVERRIDE_CGID_TAG_MASK;
-                       tegra_mc_write_32(mc_override_cfgs[i].offset,
-                               val | mc_override_cfgs[i].cgid_tag);
+                       tegra_mc_write_32(mc_txn_override_cfgs[i].offset,
+                               val | mc_txn_override_cfgs[i].cgid_tag);
                }
 
        }
index bca6f2ec31f85cee4e5d7c8748a331a624a1de64..6c7e94d10f8bfd1701440f10855946dfe9be0956 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -50,7 +50,9 @@ typedef struct smmu_regs {
 
 #define mc_make_sid_security_cfg(name) \
        { \
-               .reg = TEGRA_MC_STREAMID_BASE + MC_STREAMID_SECURITY_CFG_ ## name, \
+               .reg = TEGRA_MC_STREAMID_BASE + \
+                      MC_STREAMID_OVERRIDE_TO_SECURITY_CFG( \
+                               MC_STREAMID_OVERRIDE_CFG_ ## name), \
                .val = 0x00000000, \
        }
 
index 559ea2c59c1c933a9579e2060f7d3083e95a028a..201025dc7bcb2200d5ed88930a044f36546d228d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
 
 #include <tegra_def.h>
 
+#ifndef __ASSEMBLY__
+
+#include <sys/types.h>
+
 /*******************************************************************************
  * StreamID to indicate no SMMU translations (requests to be steered on the
  * SMMU bypass path)
 /*******************************************************************************
  * Stream ID Override Config registers
  ******************************************************************************/
-#define MC_STREAMID_OVERRIDE_CFG_PTCR          0x0
-#define MC_STREAMID_OVERRIDE_CFG_AFIR          0x70
-#define MC_STREAMID_OVERRIDE_CFG_HDAR          0xA8
-#define MC_STREAMID_OVERRIDE_CFG_HOST1XDMAR    0xB0
-#define MC_STREAMID_OVERRIDE_CFG_NVENCSRD      0xE0
-#define MC_STREAMID_OVERRIDE_CFG_SATAR         0xF8
+#define MC_STREAMID_OVERRIDE_CFG_PTCR          0x000
+#define MC_STREAMID_OVERRIDE_CFG_AFIR          0x070
+#define MC_STREAMID_OVERRIDE_CFG_HDAR          0x0A8
+#define MC_STREAMID_OVERRIDE_CFG_HOST1XDMAR    0x0B0
+#define MC_STREAMID_OVERRIDE_CFG_NVENCSRD      0x0E0
+#define MC_STREAMID_OVERRIDE_CFG_SATAR         0x0F8
 #define MC_STREAMID_OVERRIDE_CFG_MPCORER       0x138
 #define MC_STREAMID_OVERRIDE_CFG_NVENCSWR      0x158
 #define MC_STREAMID_OVERRIDE_CFG_AFIW          0x188
-#define MC_STREAMID_OVERRIDE_CFG_SATAW         0x1E8
+#define MC_STREAMID_OVERRIDE_CFG_HDAW          0x1A8
 #define MC_STREAMID_OVERRIDE_CFG_MPCOREW       0x1C8
 #define MC_STREAMID_OVERRIDE_CFG_SATAW         0x1E8
-#define MC_STREAMID_OVERRIDE_CFG_HDAW          0x1A8
 #define MC_STREAMID_OVERRIDE_CFG_ISPRA         0x220
 #define MC_STREAMID_OVERRIDE_CFG_ISPWA         0x230
 #define MC_STREAMID_OVERRIDE_CFG_ISPWB         0x238
 #define MC_STREAMID_OVERRIDE_CFG_NVDECSRD1     0x518
 
 /*******************************************************************************
- * Stream ID Security Config registers
+ * Macro to calculate Security cfg register addr from StreamID Override register
  ******************************************************************************/
-#define MC_STREAMID_SECURITY_CFG_PTCR          0x4
-#define MC_STREAMID_SECURITY_CFG_AFIR          0x74
-#define MC_STREAMID_SECURITY_CFG_HDAR          0xAC
-#define MC_STREAMID_SECURITY_CFG_HOST1XDMAR    0xB4
-#define MC_STREAMID_SECURITY_CFG_NVENCSRD      0xE4
-#define MC_STREAMID_SECURITY_CFG_SATAR         0xFC
-#define MC_STREAMID_SECURITY_CFG_HDAW          0x1AC
-#define MC_STREAMID_SECURITY_CFG_MPCORER       0x13C
-#define MC_STREAMID_SECURITY_CFG_NVENCSWR      0x15C
-#define MC_STREAMID_SECURITY_CFG_AFIW          0x18C
-#define MC_STREAMID_SECURITY_CFG_MPCOREW       0x1CC
-#define MC_STREAMID_SECURITY_CFG_SATAW         0x1EC
-#define MC_STREAMID_SECURITY_CFG_ISPRA         0x224
-#define MC_STREAMID_SECURITY_CFG_ISPWA         0x234
-#define MC_STREAMID_SECURITY_CFG_ISPWB         0x23C
-#define MC_STREAMID_SECURITY_CFG_XUSB_HOSTR    0x254
-#define MC_STREAMID_SECURITY_CFG_XUSB_HOSTW    0x25C
-#define MC_STREAMID_SECURITY_CFG_XUSB_DEVR     0x264
-#define MC_STREAMID_SECURITY_CFG_XUSB_DEVW     0x26C
-#define MC_STREAMID_SECURITY_CFG_TSECSRD       0x2A4
-#define MC_STREAMID_SECURITY_CFG_TSECSWR       0x2AC
-#define MC_STREAMID_SECURITY_CFG_GPUSRD                0x2C4
-#define MC_STREAMID_SECURITY_CFG_GPUSWR                0x2CC
-#define MC_STREAMID_SECURITY_CFG_SDMMCRA       0x304
-#define MC_STREAMID_SECURITY_CFG_SDMMCRAA      0x30C
-#define MC_STREAMID_SECURITY_CFG_SDMMCR                0x314
-#define MC_STREAMID_SECURITY_CFG_SDMMCRAB      0x31C
-#define MC_STREAMID_SECURITY_CFG_SDMMCWA       0x324
-#define MC_STREAMID_SECURITY_CFG_SDMMCWAA      0x32C
-#define MC_STREAMID_SECURITY_CFG_SDMMCW                0x334
-#define MC_STREAMID_SECURITY_CFG_SDMMCWAB      0x33C
-#define MC_STREAMID_SECURITY_CFG_VICSRD                0x364
-#define MC_STREAMID_SECURITY_CFG_VICSWR                0x36C
-#define MC_STREAMID_SECURITY_CFG_VIW           0x394
-#define MC_STREAMID_SECURITY_CFG_NVDECSRD      0x3C4
-#define MC_STREAMID_SECURITY_CFG_NVDECSWR      0x3CC
-#define MC_STREAMID_SECURITY_CFG_APER          0x3D4
-#define MC_STREAMID_SECURITY_CFG_APEW          0x3DC
-#define MC_STREAMID_SECURITY_CFG_NVJPGSRD      0x3F4
-#define MC_STREAMID_SECURITY_CFG_NVJPGSWR      0x3FC
-#define MC_STREAMID_SECURITY_CFG_SESRD         0x404
-#define MC_STREAMID_SECURITY_CFG_SESWR         0x40C
-#define MC_STREAMID_SECURITY_CFG_ETRR          0x424
-#define MC_STREAMID_SECURITY_CFG_ETRW          0x42C
-#define MC_STREAMID_SECURITY_CFG_TSECSRDB      0x434
-#define MC_STREAMID_SECURITY_CFG_TSECSWRB      0x43C
-#define MC_STREAMID_SECURITY_CFG_GPUSRD2       0x444
-#define MC_STREAMID_SECURITY_CFG_GPUSWR2       0x44C
-#define MC_STREAMID_SECURITY_CFG_AXISR         0x464
-#define MC_STREAMID_SECURITY_CFG_AXISW         0x46C
-#define MC_STREAMID_SECURITY_CFG_EQOSR         0x474
-#define MC_STREAMID_SECURITY_CFG_EQOSW         0x47C
-#define MC_STREAMID_SECURITY_CFG_UFSHCR                0x484
-#define MC_STREAMID_SECURITY_CFG_UFSHCW                0x48C
-#define MC_STREAMID_SECURITY_CFG_NVDISPLAYR    0x494
-#define MC_STREAMID_SECURITY_CFG_BPMPR         0x49C
-#define MC_STREAMID_SECURITY_CFG_BPMPW         0x4A4
-#define MC_STREAMID_SECURITY_CFG_BPMPDMAR      0x4AC
-#define MC_STREAMID_SECURITY_CFG_BPMPDMAW      0x4B4
-#define MC_STREAMID_SECURITY_CFG_AONR          0x4BC
-#define MC_STREAMID_SECURITY_CFG_AONW          0x4C4
-#define MC_STREAMID_SECURITY_CFG_AONDMAR       0x4CC
-#define MC_STREAMID_SECURITY_CFG_AONDMAW       0x4D4
-#define MC_STREAMID_SECURITY_CFG_SCER          0x4DC
-#define MC_STREAMID_SECURITY_CFG_SCEW          0x4E4
-#define MC_STREAMID_SECURITY_CFG_SCEDMAR       0x4EC
-#define MC_STREAMID_SECURITY_CFG_SCEDMAW       0x4F4
-#define MC_STREAMID_SECURITY_CFG_APEDMAR       0x4FC
-#define MC_STREAMID_SECURITY_CFG_APEDMAW       0x504
-#define MC_STREAMID_SECURITY_CFG_NVDISPLAYR1   0x50C
-#define MC_STREAMID_SECURITY_CFG_VICSRD1       0x514
-#define MC_STREAMID_SECURITY_CFG_NVDECSRD1     0x51C
-
-/*******************************************************************************
- * Memory Controller SMMU Bypass config register
- ******************************************************************************/
-#define MC_SMMU_BYPASS_CONFIG                  0x1820
-#define MC_SMMU_BYPASS_CTRL_MASK               0x3
-#define MC_SMMU_BYPASS_CTRL_SHIFT              0
-#define MC_SMMU_CTRL_TBU_BYPASS_ALL            (0 << MC_SMMU_BYPASS_CTRL_SHIFT)
-#define MC_SMMU_CTRL_TBU_RSVD                  (1 << MC_SMMU_BYPASS_CTRL_SHIFT)
-#define MC_SMMU_CTRL_TBU_BYPASS_SPL_STREAMID   (2 << MC_SMMU_BYPASS_CTRL_SHIFT)
-#define MC_SMMU_CTRL_TBU_BYPASS_NONE           (3 << MC_SMMU_BYPASS_CTRL_SHIFT)
-#define MC_SMMU_BYPASS_CONFIG_WRITE_ACCESS_BIT (1 << 31)
-#define MC_SMMU_BYPASS_CONFIG_SETTINGS         (MC_SMMU_BYPASS_CONFIG_WRITE_ACCESS_BIT | \
-                                                MC_SMMU_CTRL_TBU_BYPASS_SPL_STREAMID)
+#define MC_STREAMID_OVERRIDE_TO_SECURITY_CFG(addr) (addr + sizeof(uint32_t))
 
 /*******************************************************************************
  * Memory Controller transaction override config registers
 #define MC_TXN_OVERRIDE_CONFIG_AFIW            0x1188
 #define MC_TXN_OVERRIDE_CONFIG_SCEW            0x14e0
 
-#define MC_TXN_OVERRIDE_CONFIG_AXID_OVERRIDE_CGID      (1 << 0)
-#define MC_TXN_OVERRIDE_CONFIG_COH_PATH_OVERRIDE_SO_DEV        (2 << 4)
-#define MC_TXN_OVERRIDE_CONFIG_AXID_OVERRIDE_SO_DEV_CGID_SO_DEV_CLIENT (1 << 12)
-
-/*******************************************************************************
- * Non-SO_DEV transactions override values for CGID_TAG bitfield for the
- * MC_TXN_OVERRIDE_CONFIG_{module} registers
- ******************************************************************************/
-#define MC_TXN_OVERRIDE_CGID_TAG_DEFAULT       0
-#define MC_TXN_OVERRIDE_CGID_TAG_CLIENT_AXI_ID 1
-#define MC_TXN_OVERRIDE_CGID_TAG_ZERO          2
-#define MC_TXN_OVERRIDE_CGID_TAG_ADR           3
-#define MC_TXN_OVERRIDE_CGID_TAG_MASK          3
-
-#ifndef __ASSEMBLY__
-
-#include <sys/types.h>
-
 /*******************************************************************************
  * Structure to hold the transaction override settings to use to override
  * client inputs
@@ -342,16 +242,57 @@ typedef struct mc_streamid_security_cfg {
 #define CLIENT_INPUTS_NO_OVERRIDE                      0
 
 #define mc_make_sec_cfg(off, ns, ovrrd, access) \
-               { \
-                       .name = # off, \
-                       .offset = MC_STREAMID_SECURITY_CFG_ ## off, \
-                       .override_client_ns_flag = CLIENT_FLAG_ ## ns, \
-                       .override_client_inputs = CLIENT_INPUTS_ ## ovrrd, \
-                       .override_enable = OVERRIDE_ ## access \
-               }
+       { \
+               .name = # off, \
+               .offset = MC_STREAMID_OVERRIDE_TO_SECURITY_CFG( \
+                               MC_STREAMID_OVERRIDE_CFG_ ## off), \
+               .override_client_ns_flag = CLIENT_FLAG_ ## ns, \
+               .override_client_inputs = CLIENT_INPUTS_ ## ovrrd, \
+               .override_enable = OVERRIDE_ ## access \
+       }
+
+/*******************************************************************************
+ * Structure to hold Memory Controller's Configuration settings
+ ******************************************************************************/
+typedef struct tegra_mc_settings {
+       const uint32_t *streamid_override_cfg;
+       uint32_t num_streamid_override_cfgs;
+       const mc_streamid_security_cfg_t *streamid_security_cfg;
+       uint32_t num_streamid_security_cfgs;
+       const mc_txn_override_cfg_t *txn_override_cfg;
+       uint32_t num_txn_override_cfgs;
+} tegra_mc_settings_t;
 
 #endif /* __ASSEMBLY__ */
 
+/*******************************************************************************
+ * Memory Controller SMMU Bypass config register
+ ******************************************************************************/
+#define MC_SMMU_BYPASS_CONFIG                  0x1820
+#define MC_SMMU_BYPASS_CTRL_MASK               0x3
+#define MC_SMMU_BYPASS_CTRL_SHIFT              0
+#define MC_SMMU_CTRL_TBU_BYPASS_ALL            (0 << MC_SMMU_BYPASS_CTRL_SHIFT)
+#define MC_SMMU_CTRL_TBU_RSVD                  (1 << MC_SMMU_BYPASS_CTRL_SHIFT)
+#define MC_SMMU_CTRL_TBU_BYPASS_SPL_STREAMID   (2 << MC_SMMU_BYPASS_CTRL_SHIFT)
+#define MC_SMMU_CTRL_TBU_BYPASS_NONE           (3 << MC_SMMU_BYPASS_CTRL_SHIFT)
+#define MC_SMMU_BYPASS_CONFIG_WRITE_ACCESS_BIT (1 << 31)
+#define MC_SMMU_BYPASS_CONFIG_SETTINGS         (MC_SMMU_BYPASS_CONFIG_WRITE_ACCESS_BIT | \
+                                                MC_SMMU_CTRL_TBU_BYPASS_SPL_STREAMID)
+
+#define MC_TXN_OVERRIDE_CONFIG_AXID_OVERRIDE_CGID      (1 << 0)
+#define MC_TXN_OVERRIDE_CONFIG_COH_PATH_OVERRIDE_SO_DEV        (2 << 4)
+#define MC_TXN_OVERRIDE_CONFIG_AXID_OVERRIDE_SO_DEV_CGID_SO_DEV_CLIENT (1 << 12)
+
+/*******************************************************************************
+ * Non-SO_DEV transactions override values for CGID_TAG bitfield for the
+ * MC_TXN_OVERRIDE_CONFIG_{module} registers
+ ******************************************************************************/
+#define MC_TXN_OVERRIDE_CGID_TAG_DEFAULT       0
+#define MC_TXN_OVERRIDE_CGID_TAG_CLIENT_AXI_ID 1
+#define MC_TXN_OVERRIDE_CGID_TAG_ZERO          2
+#define MC_TXN_OVERRIDE_CGID_TAG_ADR           3
+#define MC_TXN_OVERRIDE_CGID_TAG_MASK          3
+
 /*******************************************************************************
  * Memory Controller Reset Control registers
  ******************************************************************************/
@@ -548,6 +489,14 @@ static inline void tegra_mc_streamid_write_32(uint32_t off, uint32_t val)
                        MC_TXN_OVERRIDE_CONFIG_AXID_OVERRIDE_CGID | \
                        MC_TXN_OVERRIDE_CONFIG_AXID_OVERRIDE_SO_DEV_CGID_SO_DEV_CLIENT); \
        }
+
+/*******************************************************************************
+ * Handler to read memory configuration settings
+ *
+ * Implemented by SoCs under tegra/soc/txxx
+ ******************************************************************************/
+tegra_mc_settings_t *tegra_get_mc_settings(void);
+
 #endif /* __ASSMEBLY__ */
 
 #endif /* __MEMCTRLV2_H__ */
index 0640846af2c76bccd339d10a5b53a587d65a370e..a051b49c5eb4ea5588e976762342bf483dc2c1f4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
+ * Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -31,6 +31,7 @@
 #ifndef __SMMU_H
 #define __SMMU_H
 
+#include <memctrl_v2.h>
 #include <mmio.h>
 #include <tegra_def.h>
 
diff --git a/plat/nvidia/tegra/soc/t186/plat_memctrl.c b/plat/nvidia/tegra/soc/t186/plat_memctrl.c
new file mode 100644 (file)
index 0000000..6fabaf2
--- /dev/null
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * Neither the name of ARM nor the names of its contributors may be used
+ * to endorse or promote products derived from this software without specific
+ * prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <bl_common.h>
+#include <memctrl_v2.h>
+
+/*******************************************************************************
+ * Array to hold stream_id override config register offsets
+ ******************************************************************************/
+const static uint32_t tegra186_streamid_override_regs[] = {
+       MC_STREAMID_OVERRIDE_CFG_PTCR,
+       MC_STREAMID_OVERRIDE_CFG_AFIR,
+       MC_STREAMID_OVERRIDE_CFG_HDAR,
+       MC_STREAMID_OVERRIDE_CFG_HOST1XDMAR,
+       MC_STREAMID_OVERRIDE_CFG_NVENCSRD,
+       MC_STREAMID_OVERRIDE_CFG_SATAR,
+       MC_STREAMID_OVERRIDE_CFG_MPCORER,
+       MC_STREAMID_OVERRIDE_CFG_NVENCSWR,
+       MC_STREAMID_OVERRIDE_CFG_AFIW,
+       MC_STREAMID_OVERRIDE_CFG_HDAW,
+       MC_STREAMID_OVERRIDE_CFG_MPCOREW,
+       MC_STREAMID_OVERRIDE_CFG_SATAW,
+       MC_STREAMID_OVERRIDE_CFG_ISPRA,
+       MC_STREAMID_OVERRIDE_CFG_ISPWA,
+       MC_STREAMID_OVERRIDE_CFG_ISPWB,
+       MC_STREAMID_OVERRIDE_CFG_XUSB_HOSTR,
+       MC_STREAMID_OVERRIDE_CFG_XUSB_HOSTW,
+       MC_STREAMID_OVERRIDE_CFG_XUSB_DEVR,
+       MC_STREAMID_OVERRIDE_CFG_XUSB_DEVW,
+       MC_STREAMID_OVERRIDE_CFG_TSECSRD,
+       MC_STREAMID_OVERRIDE_CFG_TSECSWR,
+       MC_STREAMID_OVERRIDE_CFG_GPUSRD,
+       MC_STREAMID_OVERRIDE_CFG_GPUSWR,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCRA,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCRAA,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCR,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCRAB,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCWA,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCWAA,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCW,
+       MC_STREAMID_OVERRIDE_CFG_SDMMCWAB,
+       MC_STREAMID_OVERRIDE_CFG_VICSRD,
+       MC_STREAMID_OVERRIDE_CFG_VICSWR,
+       MC_STREAMID_OVERRIDE_CFG_VIW,
+       MC_STREAMID_OVERRIDE_CFG_NVDECSRD,
+       MC_STREAMID_OVERRIDE_CFG_NVDECSWR,
+       MC_STREAMID_OVERRIDE_CFG_APER,
+       MC_STREAMID_OVERRIDE_CFG_APEW,
+       MC_STREAMID_OVERRIDE_CFG_NVJPGSRD,
+       MC_STREAMID_OVERRIDE_CFG_NVJPGSWR,
+       MC_STREAMID_OVERRIDE_CFG_SESRD,
+       MC_STREAMID_OVERRIDE_CFG_SESWR,
+       MC_STREAMID_OVERRIDE_CFG_ETRR,
+       MC_STREAMID_OVERRIDE_CFG_ETRW,
+       MC_STREAMID_OVERRIDE_CFG_TSECSRDB,
+       MC_STREAMID_OVERRIDE_CFG_TSECSWRB,
+       MC_STREAMID_OVERRIDE_CFG_GPUSRD2,
+       MC_STREAMID_OVERRIDE_CFG_GPUSWR2,
+       MC_STREAMID_OVERRIDE_CFG_AXISR,
+       MC_STREAMID_OVERRIDE_CFG_AXISW,
+       MC_STREAMID_OVERRIDE_CFG_EQOSR,
+       MC_STREAMID_OVERRIDE_CFG_EQOSW,
+       MC_STREAMID_OVERRIDE_CFG_UFSHCR,
+       MC_STREAMID_OVERRIDE_CFG_UFSHCW,
+       MC_STREAMID_OVERRIDE_CFG_NVDISPLAYR,
+       MC_STREAMID_OVERRIDE_CFG_BPMPR,
+       MC_STREAMID_OVERRIDE_CFG_BPMPW,
+       MC_STREAMID_OVERRIDE_CFG_BPMPDMAR,
+       MC_STREAMID_OVERRIDE_CFG_BPMPDMAW,
+       MC_STREAMID_OVERRIDE_CFG_AONR,
+       MC_STREAMID_OVERRIDE_CFG_AONW,
+       MC_STREAMID_OVERRIDE_CFG_AONDMAR,
+       MC_STREAMID_OVERRIDE_CFG_AONDMAW,
+       MC_STREAMID_OVERRIDE_CFG_SCER,
+       MC_STREAMID_OVERRIDE_CFG_SCEW,
+       MC_STREAMID_OVERRIDE_CFG_SCEDMAR,
+       MC_STREAMID_OVERRIDE_CFG_SCEDMAW,
+       MC_STREAMID_OVERRIDE_CFG_APEDMAR,
+       MC_STREAMID_OVERRIDE_CFG_APEDMAW,
+       MC_STREAMID_OVERRIDE_CFG_NVDISPLAYR1,
+       MC_STREAMID_OVERRIDE_CFG_VICSRD1,
+       MC_STREAMID_OVERRIDE_CFG_NVDECSRD1
+};
+
+/*******************************************************************************
+ * Array to hold the security configs for stream IDs
+ ******************************************************************************/
+const static mc_streamid_security_cfg_t tegra186_streamid_sec_cfgs[] = {
+       mc_make_sec_cfg(SCEW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AFIR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AFIW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVDISPLAYR1, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(XUSB_DEVR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(VICSRD1, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVENCSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(TSECSRDB, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AXISW, SECURE, NO_OVERRIDE, DISABLE),
+       mc_make_sec_cfg(SDMMCWAB, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AONDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(GPUSWR2, SECURE, NO_OVERRIDE, DISABLE),
+       mc_make_sec_cfg(SATAW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(UFSHCW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SDMMCR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SCEDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(UFSHCR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SDMMCWAA, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SESWR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(MPCORER, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(PTCR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(BPMPW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(ETRW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(GPUSRD, SECURE, NO_OVERRIDE, DISABLE),
+       mc_make_sec_cfg(VICSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SCEDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(HDAW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(ISPWA, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(EQOSW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(XUSB_HOSTW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(TSECSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SDMMCRAA, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(VIW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AXISR, SECURE, NO_OVERRIDE, DISABLE),
+       mc_make_sec_cfg(SDMMCW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(BPMPDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(ISPRA, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVDECSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(XUSB_DEVW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVDECSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(MPCOREW, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVDISPLAYR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(BPMPDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVJPGSWR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVDECSRD1, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(TSECSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVJPGSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SDMMCWA, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SCER, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(XUSB_HOSTR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(VICSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AONDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AONW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SDMMCRA, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(HOST1XDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(EQOSR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SATAR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(BPMPR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(HDAR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SDMMCRAB, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(ETRR, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(AONR, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(SESRD, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(NVENCSRD, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(GPUSWR, SECURE, NO_OVERRIDE, DISABLE),
+       mc_make_sec_cfg(TSECSWRB, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(ISPWB, NON_SECURE, OVERRIDE, ENABLE),
+       mc_make_sec_cfg(GPUSRD2, SECURE, NO_OVERRIDE, DISABLE),
+       mc_make_sec_cfg(APEDMAW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(APER, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(APEW, NON_SECURE, NO_OVERRIDE, ENABLE),
+       mc_make_sec_cfg(APEDMAR, NON_SECURE, NO_OVERRIDE, ENABLE),
+};
+
+/*******************************************************************************
+ * Array to hold the transaction override configs
+ ******************************************************************************/
+const static mc_txn_override_cfg_t tegra186_txn_override_cfgs[] = {
+       mc_make_txn_override_cfg(BPMPW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(EQOSW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(NVJPGSWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SDMMCWAA, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(MPCOREW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SCEDMAW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SDMMCW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(AXISW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(TSECSWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(GPUSWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(XUSB_HOSTW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(TSECSWRB, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(GPUSWR2, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(AONDMAW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(AONW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SESWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(BPMPDMAW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SDMMCWA, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(HDAW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(NVDECSWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(UFSHCW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SATAW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(ETRW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(VICSWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(NVENCSWR, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SDMMCWAB, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(ISPWB, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(APEW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(XUSB_DEVW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(AFIW, CGID_TAG_ADR),
+       mc_make_txn_override_cfg(SCEW, CGID_TAG_ADR),
+};
+
+/*******************************************************************************
+ * Struct to hold the memory controller settings
+ ******************************************************************************/
+static tegra_mc_settings_t tegra186_mc_settings = {
+       .streamid_override_cfg = tegra186_streamid_override_regs,
+       .num_streamid_override_cfgs = ARRAY_SIZE(tegra186_streamid_override_regs),
+       .streamid_security_cfg = tegra186_streamid_sec_cfgs,
+       .num_streamid_security_cfgs = ARRAY_SIZE(tegra186_streamid_sec_cfgs),
+       .txn_override_cfg = tegra186_txn_override_cfgs,
+       .num_txn_override_cfgs = ARRAY_SIZE(tegra186_txn_override_cfgs)
+};
+
+/*******************************************************************************
+ * Handler to return the pointer to the memory controller's settings struct
+ ******************************************************************************/
+tegra_mc_settings_t *tegra_get_mc_settings(void)
+{
+       return &tegra186_mc_settings;
+}
index bf76860c736ace84b9d4544adb76c80384a679b5..97e34635f3d9c124dff8fdd5d990b048d5eafd9e 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
+# Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
 #
 # Redistribution and use in source and binary forms, with or without
 # modification, are permitted provided that the following conditions are met:
@@ -77,8 +77,10 @@ BL31_SOURCES         +=      lib/cpus/aarch64/denver.S               \
                                ${SOC_DIR}/drivers/mce/ari.c            \
                                ${SOC_DIR}/drivers/mce/nvg.c            \
                                ${SOC_DIR}/drivers/mce/aarch64/nvg_helpers.S \
+                               ${SOC_DIR}/plat_memctrl.c               \
                                ${SOC_DIR}/plat_psci_handlers.c         \
                                ${SOC_DIR}/plat_setup.c                 \
                                ${SOC_DIR}/plat_secondary.c             \
                                ${SOC_DIR}/plat_sip_calls.c             \
                                ${SOC_DIR}/plat_trampoline.S
+